import { reqCartList,reqDeleteCartById,reqUpdateCheckCartById } from "@/api/index";

//home模块的小仓库
//state仓库存储数据的地方
const shopcart = {
    state: {
        //state中的数据默认初始值不要瞎写
        cartList:[]
    },
    //mutations修改state唯一手段
    mutations: {
        GETCARTLIST(state,cartList){
            state.cartList = cartList
        }

    },
    //action处理action 可以书写自己的业务逻辑,也可以处理异步
    actions: {
        //获取购物车的列表数据
        async getCartList({ commit }) {
            let result = await reqCartList()
            if (result.code === 200) {
                commit("GETCARTLIST", result.data)
            } 
        },
        //删除购物车中的某一个商品
        async deleteCartById({commit},skuId){
            let result = await reqDeleteCartById(skuId)
            if (result.code ==200) {
                return "ok"
            }else{
                //删除该商品失败
                return Promise.reject(new Error("faile"))
            }
        },
        //修改购物车选中状态
        async updateCheckCartById({commit},{skuId,isChecked}){
            let result = await reqUpdateCheckCartById(skuId,isChecked)
            if(result.code == 200){
                return "ok"
            }else{
                //修改商品选中状态失败
                return Promise.reject(new Error("faile"))
            }
        },
        deleAllCheckedCart({dispatch,getters}){
            //context:小仓库    commit:提交mutations修改state   getters:计算属性
            //dispatch:派发action   state:相当于当前的仓库
            //获取当前购物车中的全部产品
            let promiseAll = []
            getters.cartList.cartInfoList.forEach(item  =>{
                let promise = item.isChecked == 1 ? dispatch('deleteCartById',item.skuId): ''
                //将每次的promise添加到数组中
                promiseAll.push(promise)
            })
            //只要有一个失败的promise对象,返回的结果都是失败,只有所有成功都成功
            return Promise.all(promiseAll)
        },
        updateAllCartChecked({dispatch,state},isChecked){
            let promiseAll = []
        
            state.cartList[0].cartInfoList.forEach(item =>{
                let promise = dispatch('updateCheckCartById',{skuId:item.skuId,isChecked})
                promiseAll.push(promise)
            })
            return Promise.all(promiseAll)
        }
    },
    //getters 可以理解为计算属性,用于简化仓库数据,让组件获取仓库的数据更加方便
    getters: {
        cartList(state){
            return state.cartList[0] || {}
        },
       
    }
}

export default shopcart
